#include <stdio.h>

#define ROWS1 3
#define COLS1 3
#define ROWS2 3
#define COLS2 3


/**
 * @brief 计算两个矩阵的乘积，并将结果存储在第三个矩阵中。
 *
 * 该函数实现了两个矩阵的乘法运算，其中矩阵 mat1 的大小为 ROWS1 x COLS1，
 * 矩阵 mat2 的大小为 ROWS2 x COLS2，结果矩阵 res 的大小为 ROWS1 x COLS2。
 * 在计算过程中，每个元素的计算结果都会通过 printf 打印出来，以便调试和验证。
 *
 * @param mat1 第一个输入矩阵，大小为 ROWS1 x COLS1。
 * @param mat2 第二个输入矩阵，大小为 ROWS2 x COLS2。
 * @param res 输出矩阵，存储 mat1 和 mat2 的乘积，大小为 ROWS1 x COLS2。
 */
void matchenfa(int mat1[ROWS1][COLS1], int mat2[ROWS2][COLS2], int res[ROWS1][COLS2]) {
    int i, j, k;
    for (i = 0; i < ROWS1; i++) {
        for (j = 0; j < COLS2; j++) {
            res[i][j] = 0; // 初始化结果矩阵的当前元素为 0
            res[i][j] = 0;
            for (k = 0; k < COLS1; k++) {
                // 计算矩阵乘法的当前元素
                res[i][j] += mat1[i][k] * mat2[k][j];
                // 打印当前计算的中间结果
                printf("mat1[%d][%d] = %d, mat2[%d][%d] = %d, res[%d][%d] = %d\n", i, k, mat1[i][k], k, j, mat2[k][j], i, j, res[i][j]);
            }
        }
    }
}


int main() {
    int mat1[ROWS1][COLS1] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    int mat2[ROWS2][COLS2] = {
        {9, 8, 7},
        {6, 5, 4},
        {3, 2, 1}
    };

    int res[ROWS1][COLS2];

    matchenfa(mat1, mat2, res);

    printf("矩阵 1:\n");
    for (int i = 0; i < ROWS1; i++) {
        for (int j = 0; j < COLS1; j++) {
            printf("%d ", mat1[i][j]);
        }
        printf("\n");
    }

    printf("\n矩阵 2:\n");
    for (int i = 0; i < ROWS2; i++) {
        for (int j = 0; j < COLS2; j++) {
            printf("%d ", mat2[i][j]);
        }
        printf("\n");
    }

    printf("\n矩阵 1 和 2 的乘积:\n");
    for (int i = 0; i < ROWS1; i++) {
        for (int j = 0; j < COLS2; j++) {
            printf("%d ", res[i][j]);
        }
        printf("\n");
    }

    return 0;
}
